import pyppeteer
import asyncio
import log

async def close_tabs_except_one(ws_link: str):
    """
    关闭指定 ws_link 对应浏览器的所有标签页，只保留一个
    
    Args:
        ws_link (str): 浏览器的 WebSocket 连接地址
    
    Returns:
        bool: 操作是否成功
    """
    try:
        # 连接到浏览器
        browser = await pyppeteer.connect(browserWSEndpoint=ws_link)
        
        # 获取所有页面
        pages = await browser.pages()
        
        # 如果页面数量小于等于1，无需操作
        if len(pages) <= 1:
            log.Info(f"浏览器 {ws_link} 只有 {len(pages)} 个页面，无需关闭")
            await browser.disconnect()
            return True
        
        # 关闭除第一个页面外的所有页面
        for page in pages[1:]:
            await page.close()
        
        log.Info(f"成功关闭 {len(pages) - 1} 个页面，保留了 1 个页面")
        
        # 断开浏览器连接
        await browser.disconnect()
        
        return True
        
    except Exception as e:
        log.Error(f"关闭页面时出错: {str(e)}")
        return False

async def close_all_tabs(ws_link: str):
    """
    关闭指定 ws_link 对应浏览器的所有标签页
    
    Args:
        ws_link (str): 浏览器的 WebSocket 连接地址
    
    Returns:
        bool: 操作是否成功
    """
    try:
        # 连接到浏览器
        browser = await pyppeteer.connect(browserWSEndpoint=ws_link)
        
        # 获取所有页面
        pages = await browser.pages()
        
        # 关闭所有页面
        for page in pages:
            await page.close()
        
        log.Info(f"成功关闭所有 {len(pages)} 个页面")
        
        # 断开浏览器连接
        await browser.disconnect()
        
        return True
        
    except Exception as e:
        log.Error(f"关闭页面时出错: {str(e)}")
        return False

# 示例用法
if __name__ == "__main__":
    import bitbrowser_api as api
    
    # 获取第一个存活浏览器的 ws_link
    ids = api.get_alive_ids()
    if ids:
        ws_link = api.get_pyppeteer_wslink_by_ids(ids[0])
        
        # 运行异步函数
        asyncio.get_event_loop().run_until_complete(close_tabs_except_one(ws_link))
    else:
        print("没有找到存活的浏览器")